package com.founder.android.db;

import android.content.Context;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.database.sqlite.SQLiteDatabase.CursorFactory; 

public abstract class DBOpenHelper extends SQLiteOpenHelper {
	
    //数据库版本
    private static final int VERSION = 2;
    
    //数据库名称，可以包含绝对路径名
    private static final String DB_NAME = "app_db.sqlite";
	
	/** 
	* 创建OpenHelper 
	* @param context 上下文 
	* @param name 数据库名 
	* @param factory 游标工厂 
	* @param version 数据库版本, 不要设置为0, 如果为0则会每次都创建数据库 
	*/ 
	public DBOpenHelper(Context context, String name, CursorFactory factory, int version) { 
		super(context, name, factory, version); 
	}
	
	/** 
	* 创建OpenHelper 
	* @param context 上下文 
	* @param name 数据库名 
	*/ 
	public DBOpenHelper(Context context, String name) { 
		super(context, name, null, VERSION); 
	}
	
	/** 
	* 创建OpenHelper 
	* @param context 上下文 
	* @param name 数据库名 
	*/ 
	public DBOpenHelper(Context context) { 
		super(context, DB_NAME, null, VERSION); 
	}
	
	/** 
	* 当数据库第一次创建的时候被调用 
	*/ 
	public void onCreate(SQLiteDatabase db) {
		createAllTable(db);
	}
	
	/** 
	* 当数据库版本发生改变的时候被调用 
	*/ 
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		//Log.d("DBOpenHelper", "oldVersion:" + oldVersion + "newVersion:" + newVersion);
		if (newVersion > oldVersion) {
			onDBUpdate(db, oldVersion, newVersion);
		}
	}
	
	/**
	 * 创建所有的表
	 * @param db
	 * @throws SQLException
	 */
	protected abstract void createAllTable(SQLiteDatabase db);
	
	/**
	 * 初始化表数据
	 * @param db
	 * @throws SQLException
	 */
	protected abstract void initializeTableData(SQLiteDatabase db);
	
	/**
	 * 数据库版本变化时更新
	 * @param db
	 * @throws SQLException
	 */
	protected abstract void onDBUpdate(SQLiteDatabase db, int oldVersion, int newVersion);
}
